package com.newly.center.sys.service.domain.api;

import com.newly.common.base.entity.sys.domain.dto.DomainDto;
import com.newly.common.base.entity.sys.domain.po.DomainPo;

import java.io.Serializable;
import java.util.List;

/**
 * @program: newly-parent
 * @remark: 域
 * @author: guan
 * @create: 2022-01-14 09:59
 */
public interface IDomainService {
    /**
     * 创建域
     *
     * @param domainDto 域数据
     * @return 创建成功返回true
     */
    boolean save(DomainDto domainDto);

    /**
     * 通过id修改区域
     *
     * @param domainDto 区域数据
     * @return 修改成功返回true
     */
    boolean modifyById(DomainDto domainDto);

    /**
     * 修改需要级联操作的属性
     *
     * @param domainPo 区域数据
     * @return 修改成功返回true
     */
    boolean modifyLinkageProperties(DomainPo domainPo);

    /**
     * 修改启用状态
     *
     * @param domainIds 区域id
     * @param enable    启用状态
     * @return 修改成功返回true
     */
    boolean modifyEnableById(List<Integer> domainIds, Integer enable);

    /**
     * 通过id删除区域
     *
     * @param domainIds 区域id
     * @return 删除成功返回true
     */
    boolean removeByIds(List<Integer> domainIds);

    /**
     * 通过域id获取域信息
     *
     * @param domainId 域id
     * @return List DomainPo.class
     */
    List<DomainPo> getByIds(List<? extends Serializable> domainId);

    /**
     * 通过域id获取域信息
     *
     * @param domainId 域id
     * @return DomainPo.class
     */
    DomainPo getById(Integer domainId);

    /**
     * 通过区域id获取区域信息
     *
     * @param domainId 区域id
     * @return DomainPo.class
     */
    DomainPo getByIdInAuth(Integer domainId);

    /**
     * 通过区域id获取区域信息
     *
     * @param domainIds 区域id
     * @return DomainPo.class
     */
    List<DomainPo> getByIdsInAuth(List<Integer> domainIds);

    /**
     * 通过父id获取区域
     *
     * @param parentDomainIds 父id
     * @return List DomainPo.class
     */
    List<DomainPo> getByParentIds(List<Integer> parentDomainIds);

    /**
     * 通过父id获取区域
     *
     * @param parentDomainId 父id
     * @return List DomainPo.class
     */
    List<DomainPo> getByParentId(Integer parentDomainId);

    /**
     * 分页带关键字查询域列表
     *
     * @param keyword  关键字
     * @param fromTime 创建开始时间
     * @param toTime   创建结束时间
     * @return List DomainPo.class
     */
    List<DomainPo> listInAuth(String keyword, String fromTime, String toTime);

    /**
     * 从domainPos中递归封装子域，parentId作为父节点
     *
     * @param parentDomainPo 父域
     * @param allDomainPo    所有域数据
     * @return List DomainPo.class
     */
    List<DomainPo> packageChildren(DomainPo parentDomainPo, List<DomainPo> allDomainPo);

    /**
     * 获取domainIds的所有子域，封装进menuPos中
     *
     * @param parentDomainIds  父域id
     * @param packageDomainPos 封装数据集合
     */
    void getChildren(List<Integer> parentDomainIds, List<DomainPo> packageDomainPos);

}
